#!/bin/bash
set -e  # 遇到错误立即退出，避免批量操作失败

# ==================== 配置项（根据你的需求修改）====================
REGISTRY_URL="192.168.11.160:5000"  # 自建 Registry 地址（必填）
NAMESPACE="common"                     # 命名空间（按需修改，如 prod/test，为空则无命名空间）
IMAGE_LIST=(                        # 要推送的镜像列表（格式：原镜像名:原标签，多个用空格分隔）
  "langgenius/dify-api"
  "langgenius/dify-web"
  "b3log/siyuan:v3.3.6"
)
NEW_TAG_SUFFIX=""                 # 新标签后缀（可选，为空则沿用原标签）
# =================================================================

# 检查是否已登录 Registry（未登录则提示登录）
check_login() {
  if ! docker login -u admin "${REGISTRY_URL}" --password-stdin >/dev/null 2>&1 <<< ""; then
    echo "请登录到你的 Registry（用户名：admin）："
    docker login "${REGISTRY_URL}"
    if [ $? -ne 0 ]; then
      echo "❌ 登录失败，脚本退出！"
      exit 1
    fi
  fi
  echo "✅ 已成功登录到 ${REGISTRY_URL}"
}

# 批量打 Tag 并推送
batch_push() {
  echo -e "\n===== 开始批量处理 ${#IMAGE_LIST[@]} 个镜像 ====="
  for image in "${IMAGE_LIST[@]}"; do
    # 拆分原镜像名和原标签（处理格式：镜像名:标签）
    original_name=${image%:*}
    original_tag=${image#*:}

    # 拼接新 Tag（支持命名空间，可选沿用原标签或加后缀）
    if [ -n "${NAMESPACE}" ]; then
      new_image="${REGISTRY_URL}/${NAMESPACE}/${original_name}"
    else
      new_image="${REGISTRY_URL}/${original_name}"
    fi

    # 确定最终标签（有后缀则用原标签+后缀，否则沿用原标签）
    if [ -n "${NEW_TAG_SUFFIX}" ]; then
      new_tag="${original_tag}-${NEW_TAG_SUFFIX}"
    else
      new_tag="${original_tag}"
    fi
    full_new_image="${new_image}:${new_tag}"

    # 执行打 Tag + 推送
    echo -e "\n📌 处理镜像：${image}"
    echo "1. 打 Tag：${image} → ${full_new_image}"
    docker tag "${image}" "${full_new_image}"

    echo "2. 推送镜像到 Registry..."
    docker push "${full_new_image}"

    # 推送成功后可选：删除本地 Tag（释放空间，注释则保留）
    # docker rmi "${full_new_image}"

    echo "✅ 镜像 ${full_new_image} 推送成功！"
  done
}

# 主流程
main() {
  # 检查 Docker 是否运行
  if ! docker info >/dev/null 2>&1; then
    echo "❌ Docker 未运行，请先启动 Docker 服务！"
    exit 1
  fi

  # 检查配置项
  if [ -z "${REGISTRY_URL}" ]; then
    echo "❌ 请配置 REGISTRY_URL（你的 Registry 地址）！"
    exit 1
  fi

  # 登录 Registry
  check_login

  # 批量推送
  batch_push

  echo -e "\n🎉 所有镜像处理完成！"
  echo "📋 推送清单："
  for image in "${IMAGE_LIST[@]}"; do
    original_name=${image%:*}
    original_tag=${image#*:}
    new_tag=${NEW_TAG_SUFFIX:+"${original_tag}-${NEW_TAG_SUFFIX}"}
    [ -z "${new_tag}" ] && new_tag="${original_tag}"
    [ -n "${NAMESPACE}" ] && prefix="${REGISTRY_URL}/${NAMESPACE}/" || prefix="${REGISTRY_URL}/"
    echo "  - ${prefix}${original_name}:${new_tag}"
  done
}

# 启动脚本
main